library(rgl)
## This build of rgl does not include OpenGL functions. Use
## rglwidget() to display results, e.g. via options(rgl.printRglwidget = TRUE).
options(rgl.printRglwidget = TRUE)
visualize3D <- function(fname ,range){
x<- y<- seq(-range,range,length = 100)
data<-data.matrix(expand.grid(x,y))
`f(x,y)`<-matrix(apply(data,1,fname),
nrow = length(x),
ncol = length(y))
div<-100
color <- rev(rainbow(div))
zcol <- cut(`f(x,y)`, div)
persp3d(x,y,`f(x,y)` , col = color[zcol])
}
\[ f(x) = -a\,exp \left(-b\,\sqrt{\frac{1}{d} \sum_{i=1}^{d}{x_i^2}}\right)- \,exp\left(-b\,{\frac{1}{d} \sum_{i=1}^{d}{cos(cx_i)}}\right) + \,a+\,exp(1) \]
ackley<-function(x,a=20, b=0.2 , c =2*pi){
d <- length(x)
sum1 <- sum(x^2)
sum2 <- sum(cos(2*pi*x))
term1 <- -a * exp(-b*sqrt(sum1/d))
term2 <- -exp(sum2/d)
y <- term1 + term2 + a + exp(1)
return(y)
}
visualize3D(ackley,32)
\[ Z_n(x) = \sum_{i=1}^{n}{x_i^2} + \left(\sum_{i=1}^{n}{0.5ix_i}\right)^2 + \left(\sum_{i=1}^{n}{0.5ix_i}\right)^4 \]
zakharov <- function(x){
term1 <-sum(x^2)
i <-seq_along(x)
term2 <- sum(i*0.5*(x))
y <- term1 + term2^2 + term2^4
return(y)
}
visualize3D(zakharov,10)
\[ f(x) = (x_1 - 1)^2 +\sum_{i=2}^{n}{i(2x_i^2-x_{i-1})^2} \]
dixon <- function(x){
term1 <-(x[1]-1)^2
# computation of sum starts from i = 2 thus taking lag befor removing values
d <- length(x)-1
xlag <- x[1:d]
x <- x[-1]
i <- seq_along(x)+1
term2 <- sum(i*(2*x^2 - xlag)^2 )
y <- term1 + term2
return(y)
}
visualize3D(dixon,10)
\[ f(x) = \sum_{i=n}{n}\frac{x_i^2}{4000}- \prod_{i=1}^{n}cos\left(\frac{x_i}{\sqrt{i}}\right)+1 \]
griewank <- function(x,y){
term1 <- sum(x^2)
term2 <- prod(cos(x)/seq_along(x))
y <- 1 + (1/4000 * term1) - term2
return(y)
}
visualize3D(griewank,100)
\[ f(x) = - \sum_{i=1}^{d}sin(x_i){sin^{2m}\left(\frac{ix_i^2}{\pi}\right)} \]
michale <- function(x,m=10){
d <- length(x)
i <- seq_along(x)
sum <- sum(sin(x) * (sin(i*x^2/pi))^(2*m))
y <- sum
return(-y)
}
# new
visualize3D(michale,4)
\[ f(x)=\sum_{i=1}^{d}{ \left(\sum_{j=1}^{d}{(j^i+\beta)} \left({\left({\frac{x_j}{j}}\right)^i}-1\right) \right)^2} \]
perm <- function(x, b=0.5){
d <- length(x)
ii <- c(1:d)
jj <- matrix(rep(ii,times=d), d, d, byrow=TRUE)
xxmat <- matrix(rep(x,times=d), d, d, byrow=TRUE)
inner <- rowSums((jj^ii+b)*((xxmat/jj)^ii-1))
outer <- sum(inner^2)
y <- outer
return(y)
}
visualize3D(perm , 2)
\[ f(x) = 10d + \sum_{i=1}^{d}[x_i^2 -10cos(2\pi x_i)] \]
rastrigin <- function(x) {
y <- 10 * length(x) + sum(x^2 - 10 * cos(2 * pi * x))
return(y)
}
visualize3D(rastrigin,5)